﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Atomic.User.Entities;
using Atomic.Common;
using Atomic.Db;

#region 版本信息
/*********************************************
 * 作者：杜一博
 * 创建日期：2012/8/1 22:40:29
 *********************************************
 * 修改：
 * 修改日期：
 * 修改说明：
 *********************************************/
#endregion

namespace Atomic.User
{
    /// <summary>
    /// 用户管理基本业务接口
    /// </summary>
    public interface IUser : IError
    {
        /// <summary>
        /// 添加一个新用户
        /// </summary>
        /// <param name="entity">新用户信息</param>
        /// <returns>是否成功</returns>
        bool Add(UserBaseEntity entity);

        /// <summary>
        /// 更新用户全部信息
        /// </summary>
        /// <param name="entity">用户信息</param>
        /// <param name="userID">用户ID</param>
        /// <returns>是否成功</returns>
        bool Update(UserBaseEntity entity, int userID);

        /// <summary>
        /// 删除指定用户
        /// </summary>
        /// <param name="userID">待删除的用户ID</param>
        /// <returns>是否成功</returns>
        bool Remove(int userID);

        /// <summary>
        /// 查询指定用户
        /// </summary>
        /// <param name="userID">用户ID</param>
        /// <returns>用户信息</returns>
        UserBaseEntity Get(int userID);

        /// <summary>
        /// 查询指定用户
        /// </summary>
        /// <param name="loginName">用户登录名</param>
        /// <returns></returns>
        UserBaseEntity Get(string loginName);

        /// <summary>
        /// 添加一种新的用户类型
        /// </summary>
        /// <param name="entity">用户类型信息</param>
        /// <returns>是否成功</returns>
        bool AddType(UserTypeEntity entity);

        /// <summary>
        /// 更新用户类型信息
        /// </summary>
        /// <param name="entity">用户类型信息</param>
        /// <param name="id">用户类型ID</param>
        /// <returns>是否成功</returns>
        bool UpdateType(UserTypeEntity entity, int id);

        /// <summary>
        /// 用户指定用户类型信息
        /// </summary>
        /// <param name="id">用户类型ID</param>
        /// <returns>用户类型信息</returns>
        UserTypeEntity GetType(int id);

        /// <summary>
        /// 查询所有用户类型信息
        /// </summary>
        /// <returns>用户类型列表</returns>
        List<UserTypeEntity> GetTypes();

        /// <summary>
        /// 删除指定用户类型
        /// </summary>
        /// <param name="id">用户类型ID</param>
        /// <returns>是否删除成功</returns>
        bool RemoveType(int id);

        /// <summary>
        /// 增加新的用户扩展属性（字段）
        /// </summary>
        /// <param name="fieldEntity">新属性信息</param>
        /// <returns>是否增加成功</returns>
        bool AddProperty(UserExtendFieldEntity fieldEntity);

        /// <summary>
        /// 更新用户扩展属性（字段）
        /// </summary>
        /// <param name="fieldEntity">属性信息</param>
        /// <param name="id">旧属性ID</param>
        /// <returns>是否更新成功</returns>
        bool UpdateProperty(UserExtendFieldEntity fieldEntity, int id);

        /// <summary>
        /// 删除用户扩展属性
        /// </summary>
        /// <param name="id">扩展属性ID</param>
        /// <returns>是否删除成功</returns>
        bool RemoveProperty(int id);

        /// <summary>
        /// 按用户类型查询用户扩展属性信息
        /// </summary>
        /// <param name="userTypeID">用户类型</param>
        /// <returns>用户扩展属性信息</returns>
        List<UserExtendFieldEntity> GetExtendPropertiesByUserType(int userTypeID);
    }
}